..\..\My Documents\N64 Roms - Super Mario 64\Super Mario 64 (English).swab.v64
8037f45c: 27 bd ff e0  ADDIU sp, sp, 0xffffffe0 (-32)
8037f460: af bf 00 14  SW ra, sp, 0x14 (20)

8037f464: 3c 0e 80 34  LUI t6, 0x8034 (32820)
8037f468: 85 ce ba c8  LH t6, t6, 0xffffbac8 (-17720)
8037f46c: 24 18 00 01  ADDIU t8, r0, 0x1 (1)
8037f470: 25 cf 00 1f  ADDIU t7, t6, 0x1f (31)
8037f474: 01 f8 c8 04  SLLV t9, t8, t7
8037f478: a3 b9 00 1f  SB t9, sp, 0x1f (31)                   byte:[sp + 0x1f] = 1 << (*((char *)(0x8033bac8)) + 0x1f);

8037f47c: 3c 08 80 39  LUI t0, 0x8039 (32825)
8037f480: 85 08 b8 ac  LH t0, t0, 0xffffb8ac (-18260)
8037f484: 24 01 ff ff  ADDIU at, r0, 0xffffffff (-1)
8037f488: 11 01 00 70  BEQ at, t0, 0x8037f64c (pc + 0x1c0)    if (-1 == *(byte *)(0x8038b8ac)) goto 0x8037f64c;
8037f48c: 00 00 00 00  NOP

8037f490: 3c 09 80 39  LUI t1, 0x8039 (32825)
8037f494: 8d 29 be 28  LW t1, t1, 0xffffbe28 (-16856)
8037f498: 93 ab 00 1f  LBU t3, sp, 0x1f (31)
8037f49c: 91 2a 00 02  LBU t2, t1, 0x2 (2)
8037f4a0: 01 4b 60 24  AND t4, t2, t3
8037f4a4: 15 80 00 04  BNE t4, r0, 0x8037f4b8 (pc + 0x10)      if (*(*(0x8038be28)+2)  &  byte:[sp + 0x1f]) goto 0x8037f4b8;
8037f4a8: 00 00 00 00  NOP

8037f4ac: 24 01 00 1f  ADDIU at, r0, 0x1f (31)
8037f4b0: 15 41 00 66  BNE t2, at, 0x8037f64c (pc + 0x198)     if (*(*(0x8038be28)+2) != 0x1f) goto 0x8037f64c;
8037f4b4: 00 00 00 00  NOP
                                                               0x8037f4b8:
8037f4b8: 3c 0d 80 39  LUI t5, 0x8039 (32825)
8037f4bc: 8d ad be 28  LW t5, t5, 0xffffbe28 (-16856)
8037f4c0: 91 ae 00 03  LBU t6, t5, 0x3 (3)
8037f4c4: a7 ae 00 1c  SH t6, sp, 0x1c (28)                    short:[sp + 0x1c] = *(char *)(*(0x8038be28) + 3)

8037f4c8: 3c 04 80 39  LUI a0, 0x8039 (32825)
8037f4cc: 8c 84 b8 a0  LW a0, a0, 0xffffb8a0 (-18272)
8037f4d0: 0c 09 e2 ae  JAL 0x80278ab8                          [sp + 0x18] = 0x80278ab8(*(0x8038b8a0), 0x20);
8037f4d4: 24 05 00 20  ADDIU a1, r0, 0x20 (32)
8037f4d8: af a2 00 18  SW v0, sp, 0x18 (24)

8037f4dc: 3c 18 80 39  LUI t8, 0x8039 (32825)                  /*x*/
8037f4e0: 8f 18 be 28  LW t8, t8, 0xffffbe28 (-16856)
8037f4e4: 8f b9 00 18  LW t9, sp, 0x18 (24)
8037f4e8: 87 0f 00 04  LH t7, t8, 0x4 (4)
8037f4ec: a7 2f 00 00  SH t7, t9, 0x0 (0)                      *(short *)([sp + 0x18] + 0x0) = *(short )(*(0x8038be28) + 0x4);

8037f4f0: 3c 08 80 39  LUI t0, 0x8039 (32825)                  /*y*/
8037f4f4: 8d 08 be 28  LW t0, t0, 0xffffbe28 (-16856)
8037f4f8: 8f ab 00 18  LW t3, sp, 0x18 (24)
8037f4fc: 85 09 00 06  LH t1, t0, 0x6 (6)
8037f500: a5 69 00 02  SH t1, t3, 0x2 (2)                      *(short *)([sp + 0x18] + 0x2) = *(short )(*(0x8038be28) + 0x6);

8037f504: 3c 0c 80 39  LUI t4, 0x8039 (32825)                  /*z*/
8037f508: 8d 8c be 28  LW t4, t4, 0xffffbe28 (-16856)
8037f50c: 8f ad 00 18  LW t5, sp, 0x18 (24)
8037f510: 85 8a 00 08  LH t2, t4, 0x8 (8)
8037f514: a5 aa 00 04  SH t2, t5, 0x4 (4)                      *(short *)([sp + 0x18] + 0x4) = *(short )(*(0x8038be28) + 0x8);

8037f518: 3c 0e 80 39  LUI t6, 0x8039 (32825)                  /*theta*/
8037f51c: 8d ce be 28  LW t6, t6, 0xffffbe28 (-16856)
8037f520: 24 01 00 b4  ADDIU at, r0, 0xb4 (180)
8037f524: 8f a8 00 18  LW t0, sp, 0x18 (24)
8037f528: 85 d8 00 0a  LH t8, t6, 0xa (10)
8037f52c: 00 18 7b c0  SLL t7, t8, 0xf (15)
8037f530: 01 e1 00 1a  DIV t7, at
8037f534: 00 00 c8 12  MFLO t9
8037f538: a5 19 00 06  SH t9, t0, 0x6 (6)                      *(short *)([sp + 0x18] + 0x6) =   *(short *)(*(0x8038be28) + 0xa) * 32768 / 180

8037f53c: 00 00 00 00  NOP

8037f540: 3c 09 80 39  LUI t1, 0x8039 (32825)                  /*phi*/
8037f544: 8d 29 be 28  LW t1, t1, 0xffffbe28 (-16856)
8037f548: 24 01 00 b4  ADDIU at, r0, 0xb4 (180)
8037f54c: 8f ad 00 18  LW t5, sp, 0x18 (24)
8037f550: 85 2b 00 0c  LH t3, t1, 0xc (12)
8037f554: 00 0b 63 c0  SLL t4, t3, 0xf (15)
8037f558: 01 81 00 1a  DIV t4, at
8037f55c: 00 00 50 12  MFLO t2
8037f560: a5 aa 00 08  SH t2, t5, 0x8 (8)                      *(short *)([sp + 0x18] + 0x8) =   *(short *)(*(0x8038be28) + 0xc) * 32768 / 180

8037f564: 00 00 00 00  NOP

8037f568: 3c 0e 80 39  LUI t6, 0x8039 (32825)                  /*alpha*/
8037f56c: 8d ce be 28  LW t6, t6, 0xffffbe28 (-16856)
8037f570: 24 01 00 b4  ADDIU at, r0, 0xb4 (180)
8037f574: 8f a8 00 18  LW t0, sp, 0x18 (24)
8037f578: 85 d8 00 0e  LH t8, t6, 0xe (14)
8037f57c: 00 18 7b c0  SLL t7, t8, 0xf (15)
8037f580: 01 e1 00 1a  DIV t7, at
8037f584: 00 00 c8 12  MFLO t9
8037f588: a5 19 00 0a  SH t9, t0, 0xa (10)                     *(short *)([sp + 0x18] + 0xa) =   *(short *)(*(0x8038be28) + 0xe) * 32768 / 180

8037f58c: 00 00 00 00  NOP

8037f590: 3c 09 80 39  LUI t1, 0x8039 (32825)
8037f594: 85 29 b8 ac  LH t1, t1, 0xffffb8ac (-18260)
8037f598: 8f ab 00 18  LW t3, sp, 0x18 (24)
8037f59c: a1 69 00 0c  SB t1, t3, 0xc (12)                     *(char *)([sp + 0x18] + 0xc) = *(char *)(0x8038b8ac)

8037f5a0: 3c 0c 80 39  LUI t4, 0x8039 (32825)
8037f5a4: 85 8c b8 ac  LH t4, t4, 0xffffb8ac (-18260)
8037f5a8: 8f aa 00 18  LW t2, sp, 0x18 (24)
8037f5ac: a1 4c 00 0d  SB t4, t2, 0xd (13)                     *(char *)([sp + 0x18] + 0xd) = *(char *)(0x8038b8ac)

8037f5b0: 3c 0d 80 39  LUI t5, 0x8039 (32825)                  /*misc*/
8037f5b4: 8d ad be 28  LW t5, t5, 0xffffbe28 (-16856)
8037f5b8: 8f b8 00 18  LW t8, sp, 0x18 (24)
8037f5bc: 8d ae 00 10  LW t6, t5, 0x10 (16)
8037f5c0: af 0e 00 10  SW t6, t8, 0x10 (16)                    *([sp + 0x18] + 0x10) = *(*(0x8038be28) + 0x10)

8037f5c4: 3c 0f 80 39  LUI t7, 0x8039 (32825)                  /*type*/
8037f5c8: 8d ef be 28  LW t7, t7, 0xffffbe28 (-16856)
8037f5cc: 8f a8 00 18  LW t0, sp, 0x18 (24)
8037f5d0: 8d f9 00 14  LW t9, t7, 0x14 (20)
8037f5d4: ad 19 00 14  SW t9, t0, 0x14 (20)                    *([sp + 0x18] + 0x14) = *(*(0x8038be28) + 0x14)

8037f5d8: 97 ab 00 1c  LHU t3, sp, 0x1c (28) 
8037f5dc: 3c 09 80 33  LUI t1, 0x8033 (32819) .
8037f5e0: 8d 29 dd c4  LW t1, t1, 0xffffddc4 (-8764) .
8037f5e4: 00 0b 60 80  SLL t4, t3, 0x2 (2) .
8037f5e8: 8f ae 00 18  LW t6, sp, 0x18 (24) .
8037f5ec: 01 2c 50 21  ADDU t2, t1, t4 .
8037f5f0: 8d 4d 00 00  LW t5, t2, 0x0 (0) .
8037f5f4: ad cd 00 18  SW t5, t6, 0x18 (24) .                  *([sp + 0x18] + 0x18) = *(*(0x8032ddc4) + [sp + 0x1c] * 4)

8037f5f8: 3c 0f 80 39  LUI t7, 0x8039 (32825)
8037f5fc: 85 ef b8 ac  LH t7, t7, 0xffffb8ac (-18260)
8037f600: 3c 18 80 33  LUI t8, 0x8033 (32819)
8037f604: 8f 18 dd c8  LW t8, t8, 0xffffddc8 (-8760)
8037f608: 00 0f c9 00  SLL t9, t7, 0x4 (4) .
8037f60c: 03 2f c8 23  SUBU t9, t9, t7 .
8037f610: 00 19 c8 80  SLL t9, t9, 0x2 (2) .
8037f614: 03 19 40 21  ADDU t0, t8, t9 .
8037f618: 8d 0b 00 20  LW t3, t0, 0x20 (32) .
8037f61c: 8f a9 00 18  LW t1, sp, 0x18 (24) .
8037f620: ad 2b 00 1c  SW t3, t1, 0x1c (28) .                  *([sp + 0x18] + 0x1c) = *(*(8032ddc8) + (*(short *)(0x8038b8ac) * 16 - *(short *)(0x8038b8ac)) * 4 + 0x20)

8037f624: 3c 0d 80 39  LUI t5, 0x8039 (32825)
8037f628: 85 ad b8 ac  LH t5, t5, 0xffffb8ac (-18260)
8037f62c: 3c 0a 80 33  LUI t2, 0x8033 (32819)
8037f630: 8d 4a dd c8  LW t2, t2, 0xffffddc8 (-8760)
8037f634: 00 0d 71 00  SLL t6, t5, 0x4 (4) .
8037f638: 8f ac 00 18  LW t4, sp, 0x18 (24) .
8037f63c: 01 cd 70 23  SUBU t6, t6, t5 .
8037f640: 00 0e 70 80  SLL t6, t6, 0x2 (2) .
8037f644: 01 4e 78 21  ADDU t7, t2, t6 .
8037f648: ad ec 00 20  SW t4, t7, 0x20 (32) .                  *(*(8032ddc8) + (*(short *)(0x8038b8ac) * 16 - *(short *)(0x8038b8ac))*4 + 0x20) = [sp + 0x18]
                                                               0x8037f64c:
8037f64c: 3c 18 80 39  LUI t8, 0x8039 (32825)
8037f650: 8f 18 be 28  LW t8, t8, 0xffffbe28 (-16856)
8037f654: 3c 01 80 39  LUI at, 0x8039 (32825)
8037f658: 93 19 00 01  LBU t9, t8, 0x1 (1)
8037f65c: 03 19 40 21  ADDU t0, t8, t9
8037f660: ac 28 be 28  SW t0, at, 0xffffbe28 (-16856)          /*(adv wp)*/

8037f664: 10 00 00 01  BEQ r0, r0, 0x8037f66c (pc + 0x4)
8037f668: 00 00 00 00  NOP
8037f66c: 8f bf 00 14  LW ra, sp, 0x14 (20)
8037f670: 27 bd 00 20  ADDIU sp, sp, 0x20 (32)
8037f674: 03 e0 00 08  JR ra
8037f678: 00 00 00 00  NOP

[sp + 0x14] ra
[sp + 0x18]
[sp + 0x1c]
[sp + 0x1f] act_mask

void 0x8037f45c()
{
    byte:[sp + 0x1f] = 1 << (*((char *)(0x8033bac8)) + 0x1f);
    if (-1 == *(byte *)(0x8038b8ac)) goto 0x8037f64c;
    if (*(*(0x8038be28)+2)  &  byte:[sp + 0x1f]) goto 0x8037f4b8;
    if (*(*(0x8038be28)+2) != 0x1f) goto 0x8037f64c;
    0x8037f4b8:
    short:[sp + 0x1c] = *(char *)(*(0x8038be28) + 3)
    [sp + 0x18] = 0x80278ab8(*(0x8038b8a0), 0x20);
    *(short *)([sp + 0x18] + 0x0) = *(short )(*(0x8038be28) + 0x4);
    *(short *)([sp + 0x18] + 0x2) = *(short )(*(0x8038be28) + 0x6);
    *(short *)([sp + 0x18] + 0x4) = *(short )(*(0x8038be28) + 0x8);
    *(short *)([sp + 0x18] + 0x6) =   *(short *)(*(0x8038be28) + 0xa) * 32768 / 180
    *(short *)([sp + 0x18] + 0x8) =   *(short *)(*(0x8038be28) + 0xc) * 32768 / 180
    *(short *)([sp + 0x18] + 0xa) =   *(short *)(*(0x8038be28) + 0xe) * 32768 / 180
    *(char *)([sp + 0x18] + 0xc) = *(char *)(0x8038b8ac)
    *(char *)([sp + 0x18] + 0xd) = *(char *)(0x8038b8ac)
    *([sp + 0x18] + 0x10) = *(*(0x8038be28) + 0x10)
    *([sp + 0x18] + 0x14) = *(*(0x8038be28) + 0x14)
    *([sp + 0x18] + 0x18) = *(*(0x8032ddc4) + [sp + 0x1c] * 4)
    *([sp + 0x18] + 0x1c) = *(*(8032ddc8) + (*(short *)(0x8038b8ac) * 16 - *(short *)(0x8038b8ac)) * 4 + 0x20)
    *(*(8032ddc8) + (*(short *)(0x8038b8ac) * 16 - *(short *)(0x8038b8ac))*4 + 0x20) = [sp + 0x18]
    0x8037f64c:
    /*(adv wp)*/
}


/**-**---***-*******--******---****-**--*-*-**-***-**-**/




typedef struct tagLEVELCMD {
    uint8 command;
    uint8 size;
} LEVELCMD;

typedef struct tagOBJECTLEVELCMD {
    struct tagLEVELCMD lc; /* 2 @ 0x0  */
    char act;              /* 1 @ 0x2  */
    char look_like;        /* 1 @ 0x3  */
    short x;               /* 2 @ 0x4  */
    short y;               /* 2 @ 0x6  */
    short z;               /* 2 @ 0x8  */

    short theta;           /* 2 @ 0xa  */
    short phi;             /* 2 @ 0xc  */
    short alpha;           /* 2 @ 0xe  */

    long misc;             /* 4 @ 0x10 */
    long type;             /* 4 @ 0x14 */
} OBJECTLEVELCMD;

typedef struct tagLIVEOBJECT {
    short x;
    short y;
    short z;

    short theta;
    short phi;
    short alpha;

    char a;
    char b;

    short unused_1;

    long misc;
    long type;

    long Look_like;

    struct tagLIVEOBJECT *next;
} LIVEOBJECT;

LEVELCMD *lvlloadwp; /* 0x8038be28 */

void process_object_level_command()
{

    LIVEOBJECT *lobj; /* [sp + 0x18] */
    short look_like;  /* [sp + 0x1c] */
    char actmask;     /* [sp + 0x1f] */

    actmask = 1 << (*((char *)(0x8033bac8)) + 0x1f);   /* set up the act mask */

    if (-1 != *(byte *)(0x8038b8ac)) {

        if ((((OBJECTLEVELCMD *)lvlloadwp)->act & actmask) || (((OBJECTLEVELCMD *)lvlloadwp)->act == 0x1f)) {

            look_like = ((OBJECTLEVELCMD *)lvlloadwp)->look_like;

            lobj = 0x80278ab8(*(0x8038b8a0), 0x20);

            lobj->x = ((OBJECTLEVELCMD *)lvlloadwp)->x;
            lobj->y = ((OBJECTLEVELCMD *)lvlloadwp)->y;
            lobj->x = ((OBJECTLEVELCMD *)lvlloadwp)->z;

            lobj->theta = ((OBJECTLEVELCMD *)lvlloadwp)->theta * 32768 / 180;
            lobj->phi   = ((OBJECTLEVELCMD *)lvlloadwp)->phi   * 32768 / 180;
            lobj->alpha = ((OBJECTLEVELCMD *)lvlloadwp)->alpha * 32768 / 180;

            lobj->a = *(char *)(0x8038b8ac);
            lobj->b = *(char *)(0x8038b8ac);
 
            lobj->misc = ((OBJECTLEVELCMD *)lvlloadwp)->misc;
            lobj->type = ((OBJECTLEVELCMD *)lvlloadwp)->type;

            lobj->look_like = (*(0x8032ddc4))[look_like];

            lobj->next = *(*(8032ddc8) + *(short *)(0x8038b8ac) * 60 + 0x20);

            *(*(8032ddc8) + *(short *)(0x8038b8ac) * 60 + 0x20) = lobj;
        }
    }

    lvlloadwp += lvlloadwp->size;
}